package com.szholly.utils.session.provider;

import java.io.Serializable;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * 定义Session提供接口
 * @author CHENXU
 *
 */
public interface ISessionProvider {
	
	/**
	 * 用户名键
	 */
	static String UserName = "CurrentUserName";
	
	static String UserRealName = "CurrentUserRealName";

	/**
	 * 密码键
	 */
	static String Password = "CurrentPassword";

	/**
	 * 系统名称键
	 */
	static String OrgName = "CurrentOrgName";
	
	/**
	 * 系统名称键
	 */
	static String OrgId = "CurrentOrgId";
	
	/**
	 * 系统名称键
	 */
	static String DeptId = "CurrentDeptId";
	
	/**
	 * 系统名称键
	 */
	static String DeptName = "CurrentDeptName";

	/**
	 * 当前用户的功能集
	 */
	static String Function = "Function";

	/**
	 * 当前用户的数据功能集
	 */
	static String SQLList = "SQLList";

	/**
	 * 当前用户实体对象
	 */
	static String UserEntity = "UserEntity";

	/**
	 * 当前用户实体对象
	 */
	static String FunctionUrl = "FunctionUrl";

	/**
	 * 当前用户ID
	 */
	static String UserID = "CurrentUserId";
	
	/**
	 * 获取属性
	 * @param request
	 * @param name
	 * @return
	 */
	Serializable getAttribute(HttpServletRequest request, String name);

	/**
	 * 设置属性
	 * @param request
	 * @param response
	 * @param name
	 * @param value
	 */
	void setAttribute(HttpServletRequest request,
                      HttpServletResponse response, String name, Serializable value);

	/**
	 * 获取SessionID
	 * @param request
	 * @param response
	 * @return
	 */
	String getSessionId(HttpServletRequest request,
                        HttpServletResponse response);

	/**
	 * 注销
	 * @param request
	 * @param response
	 */
	void logout(HttpServletRequest request, HttpServletResponse response);
	
	/**
	 * 获取IP
	 * @return
	 */
	String getIp();
	
	/**
	 * 获取当前登录的用户名
	 * 
	 * @return
	 */
	String getUserName();

	/**
	 * 获取当前登录的用户名
	 * 
	 * @return
	 */
	String getUserName(HttpSession sesison);

	/**
	 * 设置当前登录的用户名
	 * 
	 * @param userName
	 */
	void setUserName(String userName);

	/**
	 * 设置当前登录的用户名
	 * 
	 * @param userName
	 */
	void setUserName(HttpSession sesison, String userName);

	/**
	 * 获取当前登录的密码
	 * 
	 * @return
	 */
	String getPassword();

	/**
	 * 获取当前登录的密码
	 * 
	 * @return
	 */
	String getPassword(HttpSession sesison);

	/**
	 * 设置当前登录的密码
	 * 
	 * @param password
	 */
	void setPassword(String password);

	/**
	 * 设置当前登录的密码
	 * 
	 * @param password
	 */
	void setPassword(HttpSession sesison, String password);

	/**
	 * 获取当前的系统名称
	 * 
	 * @return
	 */
	String getOrgName();

	/**
	 * 获取当前的系统名称
	 * 
	 * @return
	 */
	String getOrgName(HttpSession sesison);

	/**
	 * 设置当前的系统名称
	 * 
	 * @param orgName
	 */
	void setOrgName(String orgName);

	/**
	 * 设置当前的系统名称
	 * 
	 * @param orgName
	 */
	void setOrgName(HttpSession sesison, String orgName);

	/**
	 * 获取缓存在Session中的对象
	 */
	Object getObject(String key);

	/**
	 * 获取缓存在Session中的对象
	 */
	Object getObject(HttpSession sesison, String key);

	/**
	 * 设置Session对象
	 */
	void setObject(String key, Object obj);

	/**
	 * 设置Session对象
	 */
	void setObject(HttpSession sesison, String key, Object obj);

	/**
	 * 移除对象
	 */
	void remove(String key);

	/**
	 * 移除对象
	 */
	void remove(HttpSession sesison, String key);

	/**
	 * 清除Session中对象
	 */
	void clear();

	/**
	 * 清除Session中对象
	 */
	void clear(HttpSession sesison);
}